package com.zhu.transform;

import com.zhu.transform.bean.*;
import com.zhu.transform.exception.BaseException;
import com.zhu.transform.myenum.LogType;
import com.zhu.transform.util.UtilInterface;
import com.zhu.transform.util.UtilInterfaceImpl;
import com.zhu.transform.util.ZhuUtil;

import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author yingzhi zhu
 * date 2017/11/15.
 */
public class Main {

    //    放接口有限制访问次数，默认免费300次/天。
//    如有更高的访问量需求，请咨询对应的销售人员。
//    account:yan_zun
//    company:门弄手工肥肠粉万象城店
//    industry:餐饮行业
//    userArea:10区
//    urlPreFix:https://area10-win.pospal.cn:443/
//
//    appID:BB83B8BF0471944E46FD6BF539A7891C
//    appKey:224168800159782503
//            ============appId appKey end============

    private static final String startLog = "      _           _               _                   _                 _     _       _           \n" +
            "     | |         (_)             | |                 (_)               | |   (_)     | |          \n" +
            "   __| | ___  ___ _  __ _ _ __   | |__  _   _   _   _ _ _ __   __ _ ___| |__  _   ___| |__  _   _ \n" +
            "  / _` |/ _ \\/ __| |/ _` | '_ \\  | '_ \\| | | | | | | | | '_ \\ / _` |_  / '_ \\| | |_  / '_ \\| | | |\n" +
            " | (_| |  __/\\__ \\ | (_| | | | | | |_) | |_| | | |_| | | | | | (_| |/ /| | | | |  / /| | | | |_| |\n" +
            "  \\__,_|\\___||___/_|\\__, |_| |_| |_.__/ \\__, |  \\__, |_|_| |_|\\__, /___|_| |_|_| /___|_| |_|\\__,_|\n" +
            "                     __/ |               __/ |   __/ |         __/ |                              \n" +
            "                    |___/               |___/   |___/         |___/                               ";

    public static void main(String[] args) throws IOException {
        System.out.println(startLog);
        UtilInterface utilInterface = new UtilInterfaceImpl();
        //初始化配置文件
        ConfBean confBean = utilInterface.initConf();

        //获取第一次执行定时任务的时间
        Date firstTime = ZhuUtil.getTodayStartTime(confBean.getUploadTime());
        if (confBean.getAuto() == 0) {
            ZhuUtil.printLog(String.format("系统已经运行 定时任务开始时间：%s", ZhuUtil.getFormatByDate(firstTime)), LogType.INFO);
            try {
                ZhuUtil.printLog("数据转化任务开始执行", LogType.INFO);
                List<RespBean> respBeanList = utilInterface.requestData();
                List<TargetBean> targetBeans = utilInterface.parseToTarget(respBeanList);
                String filePath = utilInterface.saveDataToFile(targetBeans);
                utilInterface.uploadToFtp(filePath);
                ZhuUtil.printLog(String.format("系统已经运行 定时任务开始时间：%s", ZhuUtil.getFormatByDate(firstTime)), LogType.INFO);

            } catch (BaseException e) {
                System.out.println(e.message);
                // TODO 设计上考虑下异常的情况，做个分步处理。把读源数据，转换，发到目标ftp分开为三步，每步完成都落一个临时数据文件和状态标志文件，任意一步失败后重跑，都是从当前失败的那步开始。
            }
        } else if (confBean.getAuto() == 1) {

            String inputStr = confBean.getAutoTime();
            //language=RegExp
            String regex = "[0-9]{4}-[0-9]{2}-[0-9]{2}";
            Pattern p = Pattern.compile(regex);
            Matcher matcher = p.matcher(inputStr);
            if (!matcher.find()) {
                System.out.println("请检查conf.txt 文件下的autoTime 配置");
                System.exit(1);
//                    continue;
            }
            String endTime = String.format("%s 21:40:00", inputStr);
            String startTime = String.format("%s 00:00:00", inputStr);
            try {
                ZhuUtil.printLog("数据转化任务开始执行", LogType.INFO);
                List<RespBean> respBeanList = utilInterface.requestData(startTime, endTime);
                List<TargetBean> targetBeans = utilInterface.parseToTarget(respBeanList);
                String filePath = utilInterface.saveDataToFile(targetBeans);
                utilInterface.uploadToFtp(filePath);

            } catch (BaseException e) {
                System.out.println(e.message);
                // TODO 设计上考虑下异常的情况，做个分步处理。把读源数据，转换，发到目标ftp分开为三步，每步完成都落一个临时数据文件和状态标志文件，任意一步失败后重跑，都是从当前失败的那步开始。
            }

        }
    }
    //设置定时任务定是从网上获取数据
//        Timer timer = new Timer();
//        timer.schedule(new TimerTask() {
//            @Override
//            public void run() {
//                try {
//                ZhuUtil.printLog("数据转化任务开始执行", LogType.INFO);
//                List<RespBean>  respBeanList = utilInterface.requestData();
//                List<TargetBean> targetBeans = utilInterface.parseToTarget(respBeanList);
//                String filePath = utilInterface.saveDataToFile(targetBeans);
//                utilInterface.uploadToFtp(filePath);
//                }catch (BaseException e){
//                    System.out.println(e.message);
//             // TODO 设计上考虑下异常的情况，做个分步处理。把读源数据，转换，发到目标ftp分开为三步，每步完成都落一个临时数据文件和状态标志文件，任意一步失败后重跑，都是从当前失败的那步开始。
//                }
//            }
//        },firstTime ,24*60*60*1000L);


}
